www.gusucode.com > VC++ 模仿MSN界面 > VC++ 模仿MSN界面/gusucode/MSN/ChatLeft.cpp

    //Download by http://www.NewXing.com
// ChatLeft.cpp : implementation file
//

#include "stdafx.h"
#include "MSN.h"
#include "ChatLeft.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChatLeft dialog


CChatLeft::CChatLeft(CWnd* pParent /*=NULL*/)
	: CDialog(CChatLeft::IDD, pParent)
{
	//{{AFX_DATA_INIT(CChatLeft)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CChatLeft::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CChatLeft)
	DDX_Control(pDX, IDC_RICHEDIT_SEND, m_RichSend);
	DDX_Control(pDX, IDC_RICHEDIT_CHAT, m_RichChat);
	//DDX_Control(pDX, IDC_STATIC_TIP, m_tip);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CChatLeft, CDialog)
	//{{AFX_MSG_MAP(CChatLeft)
	ON_WM_ERASEBKGND()
	ON_WM_SIZE()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChatLeft message handlers

BOOL CChatLeft::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	CRect rcSplitter;
	CRect rect;
	GetClientRect(rect);
	
	CWnd* pWnd;
	pWnd = GetDlgItem(IDC_STATIC_SPLITTER);
	pWnd->GetWindowRect(rcSplitter);
	ScreenToClient(rcSplitter);
	m_wndSplitter.Create(WS_CHILD | WS_VISIBLE, CRect(1,rcSplitter.top,rect.Width()-2,rcSplitter.bottom), this, IDC_STATIC_SPLITTER);
	m_wndSplitter.SetRange(50, rect.Height()-100);
	if (!m_wndToolbar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE| CBRS_TOP | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolbar.LoadToolBar(IDR_TOOLBAR1))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}
	//SetWindowSkinResID(m_wndToolbar.m_hWnd, 999); 
	//SetDialogEraseBkgnd(m_hWnd);
	return TRUE; 
}

LRESULT CChatLeft::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	if (message == WM_NOTIFY)
	{
		if (wParam == IDC_STATIC_SPLITTER)
		{	
			SPC_NMHDR* pHdr = (SPC_NMHDR*) lParam;
			DoResize(pHdr->delta);
		}
	}
	return CDialog::DefWindowProc(message, wParam, lParam);
}

void CChatLeft::DoResize(int delta)
{
	CRect rect;
	GetClientRect(rect);
	int cx = rect.Width();
	int cy = rect.Height();
	CRect rcSplitter;
	
	//CStatic *tic = (CStatic*)GetDlgItem(IDC_STATIC_TIP);
	//if (tic==NULL)
	//{	
		//tic->MoveWindow(1,1,cx-2,20);
		//return;
	//}
	m_wndSplitter.GetWindowRect(rcSplitter);
	ScreenToClient(rcSplitter);

	CEdit  *rich = (CEdit*)GetDlgItem(IDC_RICHEDIT_CHAT);
	rich->MoveWindow(CRect(0,0,cx,rcSplitter.top));
	m_wndToolbar.MoveWindow(0,rcSplitter.bottom,cx,27);
	m_RichSend.MoveWindow(CRect(0, rcSplitter.bottom + 27, cx, rect.Height()));
	//m_BtnSender.MoveWindow(cx-75,rcSplitter.bottom+28,70,50);
	Invalidate();
}

void CChatLeft::OnSize(UINT nType, int cx, int cy)
{
	CDialog::OnSize(nType, cx, cy);
	if (m_RichSend.m_hWnd==NULL)
		return;
	CRect rcSplitter;
	CRect rectRichSender;
	m_wndSplitter.GetWindowRect(rcSplitter);

	m_RichSend.GetWindowRect(rectRichSender);

	m_RichSend.MoveWindow(CRect( 0, cy - rectRichSender.Height(), cx , cy));

	m_wndToolbar.MoveWindow(0,cy - rectRichSender.Height()-27,cx, 27);
	m_wndSplitter.MoveWindow(1,cy - rectRichSender.Height()-27-rcSplitter.Height(),cx-2, rcSplitter.Height());
	m_RichChat.MoveWindow(CRect(0,0,cx,cy - rectRichSender.Height()-27-rcSplitter.Height()));
	
	
	//m_tip.MoveWindow(20,1,cx-22,22);
//	m_BtnSender.MoveWindow(cx-75,cy - rectRichSender.Height()+2,70,50);
	m_wndSplitter.SetRange(50, cy-100);
	//Invalidate();
}